/*
 * 多媒体
 * 多媒体包括视频、图片等信息
 * @author      zhul
 * @createdate  2017-04-24
 */

if (typeof BusMedia !== 'object') {
    var BusMedia = {};
}

(function (window, undefined) {

    /**
     * 媒体区初始化
     * @param regionCode
     */
    BusMedia.init = function (config) {

        this.params = {};
        this.params.video = {domid: ''};
        this.params.image = {domid: ''};
        this.params.isshowcontrol = false;
        // 视频区域
        BusMedia.params.regioncode = config.regioncode;
        // 视频控件ID
        BusMedia.params.video.domid = config.videodomid;
        // 图片控件ID
        BusMedia.params.image.domid = config.imagedomid;
        // 是否显示播放控制进度条
        BusMedia.params.isshowcontrol = config.isshowcontrol;
        // 资源集合(视频、图片或其他资源集合)
        BusMedia.params.resources = [];
        // 视频资源
        BusMedia.params.videos = [];
        // 图片资源
        BusMedia.params.images = [];
        // 视频区宽高
        // BusMedia.params.width = "100%";
        // BusMedia.params.height = "200px";
        // 加载资源
        BusMedia.loadresource();
    };

    /**
     * 加载视频资源
     */
    BusMedia.loadresource = function () {
        var data = null;
        if (mediajson != null && mediajson.length > 0) {

            // 筛选本区域数据
            for (var i = 0; i < mediajson.length; i++) {
                if (BusMedia.params.regioncode == mediajson[i].regioncode) {
                    data = mediajson[i];
                }
            }

            if (data != null && data.resources != null && data.resources.length > 0) {
                BusMedia.params.resources = data.resources;

                for (var i = 0; i < data.resources.length; i++) {

                    // 筛选视频资源
                    if (data.resources[i].type == "video") {
                        BusMedia.params.videos.push(data.resources[i].data);
                    }
                    // 筛选图片资源
                    if (data.resources[i].type == "image") {
                        BusMedia.params.images.push(data.resources[i].data);
                    }
                }
            }
        }
        else {
            console.log('媒体资源无效');
        }

    }

    /**
     * 播放资源
     */
    var timerInterval = null;
    BusMedia.play = function () {

        // 轮播播放
        BusMedia.cyclicPlay();

        // 定时插播
        timerInterval = setInterval(BusMedia.interPlay, 1000);


    }

    /**
     * 循环播放
     */
    var handlerCyc = null;
    var handlerInt = null;
    var timerInt = null;
    var timestep = 0;
    // 视频播放索引
    var current = 0;
    BusMedia.cyclicPlay = function () {

        if (BusMedia.params.resources != null) {
            // 根据orderindex排序媒体资源
            var sortJson = JsonSort(BusMedia.params.resources, "orderindex");
            // 新媒体对象集
            var newres = [];
            // 筛选出轮播和图片
            var orderindex = 0;
            for (var i = 0; i < sortJson.length; i++) {
                if (sortJson[i].data.videotype == 0
                    || sortJson[i].data.videotype == undefined
                    || sortJson[i].data.videotype == null
                    || sortJson[i].data.videotype == "") {

                    // 创建新json对象
                    sortJson[i].data.type = sortJson[i].data.videotype == 0 ? 'video' : 'image';
                    sortJson[i].data.orderindex = orderindex++;
                    newres.push(sortJson[i].data);
                }
            }

            // console.log(newres);
            if (newres != null && newres.length > 0) {
                // 注册视频控件播放结束事件
                var video = document.getElementById(BusMedia.params.video.domid);
                var image = document.getElementById(BusMedia.params.image.domid);
                // 缩放视频区高度
                // var videoheight = $(video).width() * 9 / 16;
                // $(video).height(videoheight);
                // 视频结束时间注册
                if (handlerInt != null)
                    video.removeEventListener('ended', handlerInt);
                handlerCyc = function () {
                    play(newres);
                };
                video.addEventListener('ended', handlerCyc);

                play(newres);


                function play(newres) {

                    console.log(newres[current]);
                    if (newres[current].type == "video") {
                        $('#' + BusMedia.params.image.domid).hide();
                        $('#' + BusMedia.params.video.domid).show();
                        //video.currentTime = 30;
                        video.src = newres[current].localpath;
                        video.load();
                        video.play();

                    }

                    if (newres[current].type == "image") {
                        $('#' + BusMedia.params.video.domid).hide();
                        $('#' + BusMedia.params.image.domid).animate({
                            opacity: 'toggle'
                        }, "slow");
                        //$('#' + BusMedia.params.image.domid).show("slow");
                        $('#' + BusMedia.params.image.domid).css("background-image", "url(" + newres[current].localpath + ")");
                        // $('#' + BusMedia.params.image.domid).height($(video).height());
                        // 开始图片倒计时
                        timestep = 0;
                        timerInt = setInterval(timego, 1000);
                    }
                    // 播放索引自增
                    current++;
                    if (current >= newres.length) {
                        current = 0; //重新循环播放
                    }
                }


                function timego() {
                    console.log('图片播放倒计时' + timestep);
                    timestep++;
                    if (timestep >= 3) {
                        timestep = 0;
                        console.log(timerInt);
                        if (timerInt != null) {
                            $('#' + BusMedia.params.image.domid).animate({
                                opacity: 'toggle'
                            }, "slow",null,function(){
                                clearInterval(timerInt);
                                play(newres);
                            });

                        }
                    }
                }

                // for (var i = 0; i < newres.length; i++) {
                //
                // }
            }
        }


    }

    /**
     * 插播
     */
    BusMedia.interPlay = function () {

        // 新媒体插播对象集
        var newres = [];
        var jsondata = BusMedia.params.resources;
        for (var i = 0; i < jsondata.length; i++) {
            //console.log(jsondata[i].data.videotype);
            if (jsondata[i].data.videotype != "undefined"
                && jsondata[i].data.videotype != null
                && jsondata[i].data.videotype != ""
                && jsondata[i].data.videotype == 1) {
                newres.push(jsondata[i].data);
            }
        }

        if (newres != null && newres.length > 0) {
            /**
             *
             */
                // 注册视频控件播放结束事件
            var video = document.getElementById(BusMedia.params.video.domid);
            // 缩放视频区高度
            // var videoheight = $(video).width() * 9 / 16;
            // $(video).height(videoheight);

            // 如果只有一个资源，则循环播放插播视频
            if (BusMedia.params.resources != null && BusMedia.params.resources.length == 1) {
                // 停止插播定时器
                if (timerInterval != null) {
                    clearInterval(timerInterval);
                }
                video.src = newres[0].localpath;
                video.load();
                video.loop = true;
                video.play();
            }
            else {
                var tempTimer = null;
                var tempRes = null;
                var comparetime = getCurrentTime();
                for (var i = 0; i < newres.length; i++) {
                    if (newres[i].start <= comparetime && newres[i].end >= comparetime) {
                        console.log('开始循环插播。。。');
                        tempRes = newres[i];
                        // 停止插播定时器
                        if (timerInterval != null) {
                            clearInterval(timerInterval);
                        }

                        // 注册视频结束事件
                        if (handlerCyc != null)
                            video.removeEventListener('ended', handlerCyc);
                        handlerInt = function () {
                            console.log('插播结束');
                            playInt(video, tempRes);
                        };
                        video.addEventListener('ended', handlerInt);

                        playInt(video, newres[i]);

                        // 启动插播时间结束侦听计时器
                        // tempTimer = setInterval(goPlayCyc, 1000);
                        break;
                    }
                }
            }
        }

        function playInt(video, res) {
            console.log('判断是否继续插播视频播放');
            var comparetime = getCurrentTime();

            if (res.start <= comparetime && res.end >= comparetime) {
                // 开始播放插播视频
                video.src = res.localpath;
                video.load();
                video.play();
            }
        }

        function goPlayCyc() {
            var comparetime = getCurrentTime();
            console.log('插播时间侦听', comparetime, tempRes.start);
            if (tempTimer != null && tempRes != null) {
                if (!(tempRes.start <= comparetime && tempRes.end >= comparetime)) {
                    clearInterval(tempTimer);
                    // 继续轮播
                    BusMedia.cyclicPlay();
                }
            }
        }

        function getCurrentTime() {
            var date = new Date();
            var hour = date.getHours() < 10 ? ("0" + date.getHours()) : date.getHours();
            var minute = date.getMinutes() < 10 ? ("0" + date.getMinutes()) : date.getMinutes();
            return hour + ":" + minute;
        }


    }

    /*
     @function     JsonSort 对json排序
     @param        json     用来排序的json
     @param        key      排序的键值
     */
    function JsonSort(json, key) {
        //console.log(json);
        for (var j = 1, jl = json.length; j < jl; j++) {
            var temp = json[j],
                val = temp[key],
                i = j - 1;
            while (i >= 0 && json[i][key] > val) {
                json[i + 1] = json[i];
                i = i - 1;
            }
            json[i + 1] = temp;

        }
        //console.log(json);
        return json;
    }
})(window);


